import java.util.Arrays;

public class Leet16 {
    public static void main(String[] args) {
        Leet16 l = new Leet16();
        System.out.println(l.threeSumClosest(new int[]{0,2,1,-3},1));
    }
    public int threeSumClosest(int[] nums, int target) {
        Arrays.sort(nums);
        int sum = nums[0]+nums[1]+nums[2];
        for (int i = 0; i < nums.length; i++) {
            int a = i+1,b = nums.length-1;
            while (a<b){
                if (Math.abs(sum-target)>Math.abs(nums[i]+nums[a]+nums[b]-target))
                    sum = nums[i]+nums[a]+nums[b];
                if (nums[i]+nums[a]+nums[b]-target>0)
                    b--;
                else a++;
            }
        }
        return sum;
    }
//    static int min,now,tar;
//    public int threeSumClosest(int[] nums, int target) {
//        tar = target;
//        min = Integer.MAX_VALUE;
//        now = 0;
//        Arrays.sort(nums);
//        int t = Arrays.binarySearch(nums,target);
//        if (t>0){
////            dfs(nums,t,0,new int[nums.length]);
//            now = nums[t];
//            int[] temp = new int[nums.length];
//            temp[t] = 1;
//            dfs(nums,t,1,temp);
//        }else {
//            if (-t-1<nums.length)
//                t = -t-1;
//            else t = -t-2;
//            if (t<0)
//                t = 0;
//            dfs(nums,t,0,new int[nums.length]);
//            now = nums[t];
//            int[] temp = new int[nums.length];
//            temp[t] = 1;
//            dfs(nums,t,1,temp);
//        }
//        return min;
//    }
//    void dfs(int[] nums,int at,int num,int[] task){
//        if (num==3){
//            if (Math.abs(now-tar)<Math.abs(min-tar))
//                min = now;
//            return;
//        }
//        if (at+1<=nums.length-1&&task[at+1]==0){
//            now+=nums[at+1];
//            task[at+1] = 1;
//            dfs(nums,at+1,num+1,task);
//            task[at+1] = 0;
//            now-=nums[at+1];
//        }
//        if(at-1>=0&&task[at-1]==0){
//            now+=nums[at-1];
//            task[at-1] = 1;
//            dfs(nums,at-1,num+1,task);
//            task[at-1] = 0;
//            now-=nums[at-1];
//        }
//    }
}
